home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / GRAPHICS / 3DTUT.ZIP / 3DTUT3.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-04-15  |  30.4 KB  |  1,235 lines

  1. Program Euxinus_3DTUTER2_LINES;
  2.  
  3. uses crt,graph;
  4.  
  5. type
  6.   SORTTYPE = RECORD
  7.     sortlist : Array [1..400,1..2] of INTEGER
  8.   END;
  9.   SCRCORD = RECORD  { point on screen }
  10.     X : INTEGER;
  11.     Y : INTEGER;
  12.   END;
  13.   POINT = RECORD  { Point in 3d space }
  14.     X : INTEGER;
  15.     Y : INTEGER;
  16.     Z : INTEGER;
  17.   END;
  18.   POLYGON = RECORD
  19.     cornerpoints : Array [1..4] of SCRCORD;
  20.     whichpoints : Array [1..4] of INTEGER;
  21.     howmanypoints : BYTE;
  22.     zposition : INTEGER;
  23.     shadedcolor,color : Integer;
  24.     hidden : BOOLEAN;
  25.   END;
  26.   _3DOBJECT = RECORD
  27.     degreinc : POINT;
  28.     degre : POINT;
  29.     numberofpoints : INTEGER;
  30.     numberofpolys : INTEGER;
  31.     POLYs : Array [1..400] of POLYGON;
  32.     orginalcordinates : Array [1..500] of POINT;
  33.     rotatedcordinates : Array [1..500] of POINT;
  34.     screencordinates : Array [1..500] of SCRCORD;
  35.     sortdata : Sorttype;
  36.     objpos : POINT;
  37.   end;
  38.  
  39. var obj : _3DOBJECT;
  40.     sina,cosa : Array [0..360] of real;
  41.     page : BYTE;
  42.     light : point;
  43.  
  44.  
  45. Procedure object2;
  46.  
  47. BEGIN
  48.   obj.numberofpoints:=12;
  49.   obj.degre.x:=0;
  50.   obj.degre.y:=0;
  51.   obj.degre.z:=0;
  52.   obj.degreinc.x:=3;
  53.   obj.degreinc.y:=3;
  54.   obj.degreinc.z:=3;
  55.  
  56.   obj.orginalcordinates[1].x:=0;
  57.   obj.orginalcordinates[1].y:=20;
  58.   obj.orginalcordinates[1].z:=0;
  59.  
  60.   obj.orginalcordinates[2].x:=0;
  61.   obj.orginalcordinates[2].y:=10;
  62.   obj.orginalcordinates[2].z:=18;
  63.  
  64.   obj.orginalcordinates[3].x:=18;
  65.   obj.orginalcordinates[3].y:=10;
  66.   obj.orginalcordinates[3].z:=4;
  67.  
  68.   obj.orginalcordinates[4].x:=10;
  69.   obj.orginalcordinates[4].y:=10;
  70.   obj.orginalcordinates[4].z:=-18;
  71.  
  72.   obj.orginalcordinates[5].x:=-10;
  73.   obj.orginalcordinates[5].y:=10;
  74.   obj.orginalcordinates[5].z:=-18;
  75.  
  76.   obj.orginalcordinates[6].x:=-18;
  77.   obj.orginalcordinates[6].y:=10;
  78.   obj.orginalcordinates[6].z:=4;
  79.  
  80.   obj.orginalcordinates[7].x:=0;
  81.   obj.orginalcordinates[7].y:=-10;
  82.   obj.orginalcordinates[7].z:=18;
  83.  
  84.   obj.orginalcordinates[8].x:=18;
  85.   obj.orginalcordinates[8].y:=-10;
  86.   obj.orginalcordinates[8].z:=4;
  87.  
  88.   obj.orginalcordinates[9].x:=10;
  89.   obj.orginalcordinates[9].y:=-10;
  90.   obj.orginalcordinates[9].z:=-18;
  91.  
  92.   obj.orginalcordinates[10].x:=-10;
  93.   obj.orginalcordinates[10].y:=-10;
  94.   obj.orginalcordinates[10].z:=-18;
  95.  
  96.   obj.orginalcordinates[11].x:=-18;
  97.   obj.orginalcordinates[11].y:=-10;
  98.   obj.orginalcordinates[11].z:=4;
  99.  
  100.   obj.orginalcordinates[12].x:=0;
  101.   obj.orginalcordinates[12].y:=-20;
  102.   obj.orginalcordinates[12].z:=0;
  103.  
  104. END;
  105.  
  106.  
  107.  
  108.  
  109.  
  110. Procedure object1;
  111.  
  112. var i : integer;
  113.  
  114. BEGIN
  115.   obj.numberofpoints:=6;
  116.   obj.degre.x:=0;
  117.   obj.degre.y:=0;
  118.   obj.degre.z:=0;
  119.   obj.degreinc.x:=3;
  120.   obj.degreinc.y:=3;
  121.   obj.degreinc.z:=3;
  122.  
  123.   obj.orginalcordinates[1].x:=0;
  124.   obj.orginalcordinates[1].y:=30;
  125.   obj.orginalcordinates[1].z:=0;
  126.  
  127.   obj.orginalcordinates[2].x:=-15;
  128.   obj.orginalcordinates[2].y:=0;
  129.   obj.orginalcordinates[2].z:=15;
  130.  
  131.   obj.orginalcordinates[3].x:=15;
  132.   obj.orginalcordinates[3].y:=0;
  133.   obj.orginalcordinates[3].z:=15;
  134.  
  135.   obj.orginalcordinates[4].x:=15;
  136.   obj.orginalcordinates[4].y:=0;
  137.   obj.orginalcordinates[4].z:=-15;
  138.  
  139.   obj.orginalcordinates[5].x:=-15;
  140.   obj.orginalcordinates[5].y:=0;
  141.   obj.orginalcordinates[5].z:=-15;
  142.  
  143.   obj.orginalcordinates[6].x:=0;
  144.   obj.orginalcordinates[6].y:=-30;
  145.   obj.orginalcordinates[6].z:=0;
  146.  
  147.   obj.polys[1].howmanypoints:=3;
  148.   obj.polys[2].howmanypoints:=3;
  149.   obj.polys[3].howmanypoints:=3;
  150.   obj.polys[4].howmanypoints:=3;
  151.   obj.polys[5].howmanypoints:=3;
  152.   obj.polys[6].howmanypoints:=3;
  153.   obj.polys[7].howmanypoints:=3;
  154.   obj.polys[8].howmanypoints:=3;
  155.  
  156.   for i:= 1 to 3 do  obj.polys[1].whichpoints[i]:=i;
  157.  
  158.   obj.polys[2].whichpoints[1]:=2;
  159.   obj.polys[2].whichpoints[2]:=6;
  160.   obj.polys[2].whichpoints[3]:=3;
  161.  
  162.  
  163.   obj.polys[3].whichpoints[1]:=1;
  164.   obj.polys[3].whichpoints[2]:=5;
  165.   obj.polys[3].whichpoints[3]:=2;
  166.  
  167.  
  168.   obj.polys[4].whichpoints[1]:=5;
  169.   obj.polys[4].whichpoints[2]:=6;
  170.   obj.polys[4].whichpoints[3]:=2;
  171.  
  172.  
  173.   obj.polys[5].whichpoints[1]:=1;
  174.   obj.polys[5].whichpoints[2]:=4;
  175.   obj.polys[5].whichpoints[3]:=5;
  176.  
  177.  
  178.   obj.polys[6].whichpoints[1]:=4;
  179.   obj.polys[6].whichpoints[2]:=6;
  180.   obj.polys[6].whichpoints[3]:=5;
  181.  
  182.   obj.polys[7].whichpoints[1]:=1;
  183.   obj.polys[7].whichpoints[2]:=3;
  184.   obj.polys[7].whichpoints[3]:=4;
  185.  
  186.   obj.polys[8].whichpoints[1]:=3;
  187.   obj.polys[8].whichpoints[2]:=6;
  188.   obj.polys[8].whichpoints[3]:=4;
  189.  
  190.  
  191.   obj.numberofpolys:=8;
  192.   for i:= 1 to 8 do obj.polys[i].color:=8;
  193.  
  194. END;
  195.  
  196.  
  197.  
  198. Procedure ship3;
  199.  
  200. var i : INTEGER;
  201.  
  202. BEGIN
  203.   obj.numberofpoints:=13;
  204.   obj.degre.x:=0;
  205.   obj.degre.y:=0;
  206.   obj.degre.z:=0;
  207.   obj.degreinc.x:=3;
  208.   obj.degreinc.y:=3;
  209.   obj.degreinc.z:=3;
  210.  
  211.   obj.orginalcordinates[1].x:=0;
  212.   obj.orginalcordinates[1].y:=0;
  213.   obj.orginalcordinates[1].z:=40;
  214.  
  215.   obj.orginalcordinates[2].x:=-20;
  216.   obj.orginalcordinates[2].y:=0;
  217.   obj.orginalcordinates[2].z:=-20;
  218.  
  219.   obj.orginalcordinates[3].x:=-14;
  220.   obj.orginalcordinates[3].y:=5;
  221.   obj.orginalcordinates[3].z:=-23;
  222.  
  223.   obj.orginalcordinates[4].x:=-6;
  224.   obj.orginalcordinates[4].y:=7;
  225.   obj.orginalcordinates[4].z:=-25;
  226.  
  227.   obj.orginalcordinates[5].x:=0;
  228.   obj.orginalcordinates[5].y:=8;
  229.   obj.orginalcordinates[5].z:=-26;
  230.  
  231.   obj.orginalcordinates[6].x:=6;
  232.   obj.orginalcordinates[6].y:=7;
  233.   obj.orginalcordinates[6].z:=-25;
  234.  
  235.   obj.orginalcordinates[7].x:=14;
  236.   obj.orginalcordinates[7].y:=5;
  237.   obj.orginalcordinates[7].z:=-23;
  238.  
  239.   obj.orginalcordinates[8].x:=20;
  240.   obj.orginalcordinates[8].y:=0;
  241.   obj.orginalcordinates[8].z:=-20;
  242.  
  243.   obj.orginalcordinates[9].x:=14;
  244.   obj.orginalcordinates[9].y:=-5;
  245.   obj.orginalcordinates[9].z:=-23;
  246.  
  247.   obj.orginalcordinates[10].x:=6;
  248.   obj.orginalcordinates[10].y:=-7;
  249.   obj.orginalcordinates[10].z:=-25;
  250.  
  251.   obj.orginalcordinates[11].x:=0;
  252.   obj.orginalcordinates[11].y:=-8;
  253.   obj.orginalcordinates[11].z:=-26;
  254.  
  255.   obj.orginalcordinates[12].x:=-6;
  256.   obj.orginalcordinates[12].y:=-7;
  257.   obj.orginalcordinates[12].z:=-25;
  258.  
  259.   obj.orginalcordinates[13].x:=-14;
  260.   obj.orginalcordinates[13].y:=-5;
  261.   obj.orginalcordinates[13].z:=-23;
  262.  
  263.  
  264.   for i:= 1 to 18 do obj.polys[i].howmanypoints:=3;
  265.   for i:= 8 to 11 do obj.polys[i].howmanypoints:=4;
  266.  
  267.   obj.numberofpolys:=18;
  268.  
  269.   obj.polys[1].whichpoints[1]:=3;
  270.   obj.polys[1].whichpoints[2]:=2;
  271.   obj.polys[1].whichpoints[3]:=1;
  272.  
  273.   obj.polys[2].whichpoints[1]:=4;
  274.   obj.polys[2].whichpoints[2]:=3;
  275.   obj.polys[2].whichpoints[3]:=1;
  276.  
  277.   obj.polys[3].whichpoints[1]:=5;
  278.   obj.polys[3].whichpoints[2]:=4;
  279.   obj.polys[3].whichpoints[3]:=1;
  280.  
  281.   obj.polys[4].whichpoints[1]:=5;
  282.   obj.polys[4].whichpoints[2]:=1;
  283.   obj.polys[4].whichpoints[3]:=6;
  284.  
  285.   obj.polys[5].whichpoints[1]:=6;
  286.   obj.polys[5].whichpoints[2]:=1;
  287.   obj.polys[5].whichpoints[3]:=7;
  288.  
  289.   obj.polys[6].whichpoints[1]:=7;
  290.   obj.polys[6].whichpoints[2]:=1;
  291.   obj.polys[6].whichpoints[3]:=8;
  292.  
  293.   obj.polys[7].whichpoints[1]:=3;
  294.   obj.polys[7].whichpoints[2]:=2;
  295.   obj.polys[7].whichpoints[3]:=13;
  296.  
  297.   obj.polys[8].whichpoints[1]:=3;
  298.   obj.polys[8].whichpoints[2]:=13;
  299.   obj.polys[8].whichpoints[3]:=12;
  300.   obj.polys[8].whichpoints[4]:=4;
  301.  
  302.   obj.polys[9].whichpoints[1]:=4;
  303.   obj.polys[9].whichpoints[2]:=12;
  304.   obj.polys[9].whichpoints[3]:=11;
  305.   obj.polys[9].whichpoints[4]:=5;
  306.  
  307.   obj.polys[10].whichpoints[1]:=5;
  308.   obj.polys[10].whichpoints[2]:=11;
  309.   obj.polys[10].whichpoints[3]:=10;
  310.   obj.polys[10].whichpoints[4]:=6;
  311.  
  312.   obj.polys[11].whichpoints[1]:=6;
  313.   obj.polys[11].whichpoints[2]:=10;
  314.   obj.polys[11].whichpoints[3]:=9;
  315.   obj.polys[11].whichpoints[4]:=7;
  316.  
  317.   obj.polys[12].whichpoints[1]:=7;
  318.   obj.polys[12].whichpoints[2]:=9;
  319.   obj.polys[12].whichpoints[3]:=8;
  320.  
  321.   obj.polys[12].whichpoints[1]:=7;
  322.   obj.polys[12].whichpoints[2]:=9;
  323.   obj.polys[12].whichpoints[3]:=8;
  324.  
  325.   obj.polys[13].whichpoints[1]:=1;
  326.   obj.polys[13].whichpoints[2]:=2;
  327.   obj.polys[13].whichpoints[3]:=13;
  328.  
  329.   obj.polys[14].whichpoints[1]:=1;
  330.   obj.polys[14].whichpoints[2]:=13;
  331.   obj.polys[14].whichpoints[3]:=12;
  332.  
  333.   obj.polys[15].whichpoints[1]:=1;
  334.   obj.polys[15].whichpoints[2]:=12;
  335.   obj.polys[15].whichpoints[3]:=11;
  336.  
  337.   obj.polys[16].whichpoints[1]:=1;
  338.   obj.polys[16].whichpoints[2]:=11;
  339.   obj.polys[16].whichpoints[3]:=10;
  340.  
  341.   obj.polys[17].whichpoints[1]:=1;
  342.   obj.polys[17].whichpoints[2]:=10;
  343.   obj.polys[17].whichpoints[3]:=9;
  344.  
  345.   obj.polys[18].whichpoints[1]:=1;
  346.   obj.polys[18].whichpoints[2]:=9;
  347.   obj.polys[18].whichpoints[3]:=8;
  348.  
  349.   for i:= 1 to 18 do obj.polys[i].color:=6;
  350.   for i:= 8 to 11 do obj.polys[i].color:=9;
  351.  
  352.  
  353. end;
  354.  
  355. Procedure ship2;
  356.  
  357. var i : integer;
  358.  
  359. BEGIN
  360.   obj.numberofpoints:=5;
  361.   obj.degre.x:=0;
  362.   obj.degre.y:=0;
  363.   obj.degre.z:=0;
  364.   obj.degreinc.x:=3;
  365.   obj.degreinc.y:=3;
  366.   obj.degreinc.z:=3;
  367.  
  368.  
  369.   obj.orginalcordinates[1].x:=0;
  370.   obj.orginalcordinates[1].y:=0;
  371.   obj.orginalcordinates[1].z:=60;
  372.  
  373.   obj.orginalcordinates[2].x:=-40;
  374.   obj.orginalcordinates[2].y:=0;
  375.   obj.orginalcordinates[2].z:=-40;
  376.  
  377.   obj.orginalcordinates[3].x:=0;
  378.   obj.orginalcordinates[3].y:=20;
  379.   obj.orginalcordinates[3].z:=-50;
  380.  
  381.   obj.orginalcordinates[4].x:=40;
  382.   obj.orginalcordinates[4].y:=0;
  383.   obj.orginalcordinates[4].z:=-40;
  384.  
  385.   obj.orginalcordinates[5].x:=0;
  386.   obj.orginalcordinates[5].y:=-20;
  387.   obj.orginalcordinates[5].z:=-50;
  388.  
  389.   for i:= 1 to 4 do obj.polys[i].howmanypoints:=3;
  390.   obj.polys[5].howmanypoints:=4;
  391.  
  392.   obj.numberofpolys:=5;
  393.  
  394.   obj.polys[1].whichpoints[1]:=3;
  395.   obj.polys[1].whichpoints[2]:=2;
  396.   obj.polys[1].whichpoints[3]:=1;
  397.  
  398.   obj.polys[2].whichpoints[1]:=3;
  399.   obj.polys[2].whichpoints[2]:=1;
  400.   obj.polys[2].whichpoints[3]:=4;
  401.  
  402.   obj.polys[3].whichpoints[1]:=4;
  403.   obj.polys[3].whichpoints[2]:=1;
  404.   obj.polys[3].whichpoints[3]:=5;
  405.  
  406.   obj.polys[4].whichpoints[1]:=2;
  407.   obj.polys[4].whichpoints[2]:=1;
  408.   obj.polys[4].whichpoints[3]:=5;
  409.  
  410.   obj.polys[5].whichpoints[1]:=3;
  411.   obj.polys[5].whichpoints[2]:=2;
  412.   obj.polys[5].whichpoints[3]:=5;
  413.   obj.polys[5].whichpoints[4]:=4;
  414.  
  415.   for i:= 1 to 5 do obj.polys[i].color:=8;
  416.  
  417.  
  418. end;
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425. Procedure ship;
  426.  
  427. var i : integer;
  428.  
  429. BEGIN
  430.   obj.numberofpoints:=7;
  431.   obj.degre.x:=0;
  432.   obj.degre.y:=0;
  433.   obj.degre.z:=0;
  434.   obj.degreinc.x:=3;
  435.   obj.degreinc.y:=3;
  436.   obj.degreinc.z:=3;
  437.  
  438.  
  439.   obj.orginalcordinates[1].x:=0;
  440.   obj.orginalcordinates[1].y:=0;
  441.   obj.orginalcordinates[1].z:=60;
  442.  
  443.   obj.orginalcordinates[2].x:=-40;
  444.   obj.orginalcordinates[2].y:=0;
  445.   obj.orginalcordinates[2].z:=-40;
  446.  
  447.   obj.orginalcordinates[3].x:=-20;
  448.   obj.orginalcordinates[3].y:=10;
  449.   obj.orginalcordinates[3].z:=-50;
  450.  
  451.   obj.orginalcordinates[4].x:=20;
  452.   obj.orginalcordinates[4].y:=10;
  453.   obj.orginalcordinates[4].z:=-50;
  454.  
  455.   obj.orginalcordinates[5].x:=40;
  456.   obj.orginalcordinates[5].y:=0;
  457.   obj.orginalcordinates[5].z:=-40;
  458.  
  459.   obj.orginalcordinates[6].x:=20;
  460.   obj.orginalcordinates[6].y:=-10;
  461.   obj.orginalcordinates[6].z:=-50;
  462.  
  463.   obj.orginalcordinates[7].x:=-20;
  464.   obj.orginalcordinates[7].y:=-10;
  465.   obj.orginalcordinates[7].z:=-50;
  466.  
  467.   for i:= 1 to 9 do obj.polys[i].howmanypoints:=3;
  468.   obj.polys[5].howmanypoints:=4;
  469.  
  470.   obj.numberofpolys:=9;
  471.  
  472.   obj.polys[1].whichpoints[1]:=3;
  473.   obj.polys[1].whichpoints[2]:=2;
  474.   obj.polys[1].whichpoints[3]:=1;
  475.  
  476.   obj.polys[2].whichpoints[1]:=3;
  477.   obj.polys[2].whichpoints[2]:=1;
  478.   obj.polys[2].whichpoints[3]:=4;
  479.  
  480.   obj.polys[3].whichpoints[1]:=4;
  481.   obj.polys[3].whichpoints[2]:=1;
  482.   obj.polys[3].whichpoints[3]:=5;
  483.  
  484.   obj.polys[4].whichpoints[1]:=3;
  485.   obj.polys[4].whichpoints[2]:=2;
  486.   obj.polys[4].whichpoints[3]:=7;
  487.  
  488.   obj.polys[5].whichpoints[1]:=3;
  489.   obj.polys[5].whichpoints[2]:=7;
  490.   obj.polys[5].whichpoints[3]:=6;
  491.   obj.polys[5].whichpoints[4]:=4;
  492.  
  493.   obj.polys[6].whichpoints[1]:=4;
  494.   obj.polys[6].whichpoints[2]:=6;
  495.   obj.polys[6].whichpoints[3]:=5;
  496.  
  497.   obj.polys[7].whichpoints[1]:=1;
  498.   obj.polys[7].whichpoints[2]:=2;
  499.   obj.polys[7].whichpoints[3]:=7;
  500.  
  501.   obj.polys[8].whichpoints[1]:=1;
  502.   obj.polys[8].whichpoints[2]:=7;
  503.   obj.polys[8].whichpoints[3]:=6;
  504.  
  505.   obj.polys[9].whichpoints[1]:=1;
  506.   obj.polys[9].whichpoints[2]:=6;
  507.   obj.polys[9].whichpoints[3]:=5;
  508.  
  509.   for i:= 1 to 9 do obj.polys[i].color:=6;
  510.   obj.polys[5].color:=9;
  511.  
  512. end;
  513.  
  514.  
  515. Procedure object3;
  516.  
  517. var i : integer;
  518.  
  519. BEGIN
  520.   obj.numberofpoints:=14;
  521.   obj.degre.x:=0;
  522.   obj.degre.y:=0;
  523.   obj.degre.z:=0;
  524.   obj.degreinc.x:=3;
  525.   obj.degreinc.y:=3;
  526.   obj.degreinc.z:=3;
  527.  
  528.  
  529.   obj.orginalcordinates[1].x:=0;
  530.   obj.orginalcordinates[1].y:=30;
  531.   obj.orginalcordinates[1].z:=0;
  532.  
  533.   obj.orginalcordinates[2].x:=-20;
  534.   obj.orginalcordinates[2].y:=20;
  535.   obj.orginalcordinates[2].z:=20;
  536.  
  537.   obj.orginalcordinates[3].x:=20;
  538.   obj.orginalcordinates[3].y:=20;
  539.   obj.orginalcordinates[3].z:=20;
  540.  
  541.   obj.orginalcordinates[4].x:=-30;
  542.   obj.orginalcordinates[4].y:=0;
  543.   obj.orginalcordinates[4].z:=0;
  544.  
  545.   obj.orginalcordinates[5].x:=0;
  546.   obj.orginalcordinates[5].y:=0;
  547.   obj.orginalcordinates[5].z:=30;
  548.  
  549.   obj.orginalcordinates[6].x:=30;
  550.   obj.orginalcordinates[6].y:=0;
  551.   obj.orginalcordinates[6].z:=0;
  552.  
  553.   obj.orginalcordinates[7].x:=-20;
  554.   obj.orginalcordinates[7].y:=-20;
  555.   obj.orginalcordinates[7].z:=20;
  556.  
  557.   obj.orginalcordinates[8].x:=20;
  558.   obj.orginalcordinates[8].y:=-20;
  559.   obj.orginalcordinates[8].z:=20;
  560.  
  561.   obj.orginalcordinates[9].x:=0;
  562.   obj.orginalcordinates[9].y:=-30;
  563.   obj.orginalcordinates[9].z:=0;
  564.  
  565.   obj.orginalcordinates[10].x:=-20;
  566.   obj.orginalcordinates[10].y:=20;
  567.   obj.orginalcordinates[10].z:=-20;
  568.  
  569.   obj.orginalcordinates[11].x:=20;
  570.   obj.orginalcordinates[11].y:=20;
  571.   obj.orginalcordinates[11].z:=-20;
  572.  
  573.   obj.orginalcordinates[12].x:=0;
  574.   obj.orginalcordinates[12].y:=0;
  575.   obj.orginalcordinates[12].z:=-30;
  576.  
  577.   obj.orginalcordinates[13].x:=-20;
  578.   obj.orginalcordinates[13].y:=-20;
  579.   obj.orginalcordinates[13].z:=-20;
  580.  
  581.   obj.orginalcordinates[14].x:=20;
  582.   obj.orginalcordinates[14].y:=-20;
  583.   obj.orginalcordinates[14].z:=-20;
  584.  
  585.   for i:= 1 to 24 do obj.polys[i].howmanypoints:=3;
  586.  
  587.   obj.numberofpolys:=24;
  588.  
  589.   obj.polys[1].whichpoints[1]:=1;
  590.   obj.polys[1].whichpoints[2]:=2;
  591.   obj.polys[1].whichpoints[3]:=3;
  592.  
  593.   obj.polys[2].whichpoints[1]:=1;
  594.   obj.polys[2].whichpoints[2]:=3;
  595.   obj.polys[2].whichpoints[3]:=11;
  596.  
  597.   obj.polys[3].whichpoints[1]:=1;
  598.   obj.polys[3].whichpoints[2]:=11;
  599.   obj.polys[3].whichpoints[3]:=10;
  600.  
  601.   obj.polys[4].whichpoints[1]:=1;
  602.   obj.polys[4].whichpoints[2]:=10;
  603.   obj.polys[4].whichpoints[3]:=2;
  604.  
  605.   obj.polys[5].whichpoints[1]:=2;
  606.   obj.polys[5].whichpoints[2]:=5;
  607.   obj.polys[5].whichpoints[3]:=3;
  608.  
  609.   obj.polys[6].whichpoints[1]:=3;
  610.   obj.polys[6].whichpoints[2]:=6;
  611.   obj.polys[6].whichpoints[3]:=11;
  612.  
  613.   obj.polys[7].whichpoints[1]:=11;
  614.   obj.polys[7].whichpoints[2]:=12;
  615.   obj.polys[7].whichpoints[3]:=10;
  616.  
  617.   obj.polys[8].whichpoints[1]:=10;
  618.   obj.polys[8].whichpoints[2]:=4;
  619.   obj.polys[8].whichpoints[3]:=2;
  620.  
  621.   obj.polys[9].whichpoints[1]:=2;
  622.   obj.polys[9].whichpoints[2]:=7;
  623.   obj.polys[9].whichpoints[3]:=5;
  624.  
  625.   obj.polys[10].whichpoints[1]:=3;
  626.   obj.polys[10].whichpoints[2]:=5;
  627.   obj.polys[10].whichpoints[3]:=8;
  628.  
  629.   obj.polys[11].whichpoints[1]:=3;
  630.   obj.polys[11].whichpoints[2]:=8;
  631.   obj.polys[11].whichpoints[3]:=6;
  632.  
  633.   obj.polys[12].whichpoints[1]:=11;
  634.   obj.polys[12].whichpoints[2]:=6;
  635.   obj.polys[12].whichpoints[3]:=14;
  636.  
  637.   obj.polys[13].whichpoints[1]:=11;
  638.   obj.polys[13].whichpoints[2]:=14;
  639.   obj.polys[13].whichpoints[3]:=12;
  640.  
  641.   obj.polys[14].whichpoints[1]:=10;
  642.   obj.polys[14].whichpoints[2]:=12;
  643.   obj.polys[14].whichpoints[3]:=13;
  644.  
  645.   obj.polys[15].whichpoints[1]:=10;
  646.   obj.polys[15].whichpoints[2]:=13;
  647.   obj.polys[15].whichpoints[3]:=4;
  648.  
  649.   obj.polys[16].whichpoints[1]:=2;
  650.   obj.polys[16].whichpoints[2]:=4;
  651.   obj.polys[16].whichpoints[3]:=7;
  652.  
  653.   obj.polys[17].whichpoints[1]:=7;
  654.   obj.polys[17].whichpoints[2]:=9;
  655.   obj.polys[17].whichpoints[3]:=8;
  656.  
  657.   obj.polys[18].whichpoints[1]:=8;
  658.   obj.polys[18].whichpoints[2]:=9;
  659.   obj.polys[18].whichpoints[3]:=14;
  660.  
  661.   obj.polys[19].whichpoints[1]:=14;
  662.   obj.polys[19].whichpoints[2]:=9;
  663.   obj.polys[19].whichpoints[3]:=13;
  664.  
  665.   obj.polys[20].whichpoints[1]:=13;
  666.   obj.polys[20].whichpoints[2]:=9;
  667.   obj.polys[20].whichpoints[3]:=7;
  668.  
  669.   obj.polys[21].whichpoints[1]:=5;
  670.   obj.polys[21].whichpoints[2]:=7;
  671.   obj.polys[21].whichpoints[3]:=8;
  672.  
  673.   obj.polys[22].whichpoints[1]:=6;
  674.   obj.polys[22].whichpoints[2]:=8;
  675.   obj.polys[22].whichpoints[3]:=14;
  676.  
  677.   obj.polys[23].whichpoints[1]:=12;
  678.   obj.polys[23].whichpoints[2]:=14;
  679.   obj.polys[23].whichpoints[3]:=13;
  680.  
  681.   obj.polys[24].whichpoints[1]:=4;
  682.   obj.polys[24].whichpoints[2]:=13;
  683.   obj.polys[24].whichpoints[3]:=7;
  684.  
  685.   for i:= 1 to 24 do obj.polys[i].color:=8;
  686.  
  687.  
  688. END;
  689.  
  690.  
  691.  
  692. Procedure semitriangle;
  693.  
  694. var i : integer;
  695.  
  696. BEGIN
  697.   obj.numberofpoints:=8;
  698.   obj.degre.x:=0;
  699.   obj.degre.y:=0;
  700.   obj.degre.z:=0;
  701.   obj.degreinc.x:=3;
  702.   obj.degreinc.y:=3;
  703.   obj.degreinc.z:=3;
  704.  
  705.  
  706.   obj.orginalcordinates[1].x:=-2;
  707.   obj.orginalcordinates[1].y:=-33;
  708.   obj.orginalcordinates[1].z:=2;
  709.  
  710.   obj.orginalcordinates[2].x:=-33;
  711.   obj.orginalcordinates[2].y:=33;
  712.   obj.orginalcordinates[2].z:=33;
  713.  
  714.   obj.orginalcordinates[3].x:=33;
  715.   obj.orginalcordinates[3].y:=33;
  716.   obj.orginalcordinates[3].z:=33;
  717.  
  718.   obj.orginalcordinates[4].x:=2;
  719.   obj.orginalcordinates[4].y:=-33;
  720.   obj.orginalcordinates[4].z:=2;
  721.  
  722.   obj.orginalcordinates[5].x:=-2;
  723.   obj.orginalcordinates[5].y:=-33;
  724.   obj.orginalcordinates[5].z:=-2;
  725.  
  726.   obj.orginalcordinates[6].x:=-33;
  727.   obj.orginalcordinates[6].y:=33;
  728.   obj.orginalcordinates[6].z:=-33;
  729.  
  730.   obj.orginalcordinates[7].x:=33;
  731.   obj.orginalcordinates[7].y:=33;
  732.   obj.orginalcordinates[7].z:=-33;
  733.  
  734.   obj.orginalcordinates[8].x:=2;
  735.   obj.orginalcordinates[8].y:=-33;
  736.   obj.orginalcordinates[8].z:=-2;
  737.  
  738.   for i:= 1 to 4 do  obj.polys[1].whichpoints[i]:=i;
  739.  
  740.   obj.polys[2].whichpoints[1]:=8;
  741.   obj.polys[2].whichpoints[2]:=7;
  742.   obj.polys[2].whichpoints[3]:=6;
  743.   obj.polys[2].whichpoints[4]:=5;
  744.  
  745.   obj.polys[3].whichpoints[1]:=5;
  746.   obj.polys[3].whichpoints[2]:=6;
  747.   obj.polys[3].whichpoints[3]:=2;
  748.   obj.polys[3].whichpoints[4]:=1;
  749.  
  750.   obj.polys[4].whichpoints[1]:=4;
  751.   obj.polys[4].whichpoints[2]:=3;
  752.   obj.polys[4].whichpoints[3]:=7;
  753.   obj.polys[4].whichpoints[4]:=8;
  754.  
  755.   obj.polys[5].whichpoints[1]:=5;
  756.   obj.polys[5].whichpoints[2]:=1;
  757.   obj.polys[5].whichpoints[3]:=4;
  758.   obj.polys[5].whichpoints[4]:=8;
  759.  
  760.   obj.polys[6].whichpoints[1]:=2;
  761.   obj.polys[6].whichpoints[2]:=6;
  762.   obj.polys[6].whichpoints[3]:=7;
  763.   obj.polys[6].whichpoints[4]:=3;
  764.  
  765.   obj.numberofpolys:=6;
  766.   for i:= 1 to 6 do obj.polys[i].color:=8;
  767.   for i:= 1 to 6 do obj.polys[i].howmanypoints:=4;
  768. END;
  769.  
  770. Procedure rektangle1;
  771.  
  772. var i : integer;
  773.  
  774.  
  775. BEGIN
  776.   obj.numberofpoints:=8;
  777.   obj.degre.x:=0;
  778.   obj.degre.y:=0;
  779.   obj.degre.z:=0;
  780.   obj.degreinc.x:=3;
  781.   obj.degreinc.y:=3;
  782.   obj.degreinc.z:=3;
  783.  
  784.  
  785.  
  786.   obj.orginalcordinates[1].x:=-5;
  787.   obj.orginalcordinates[1].y:=-5;
  788.   obj.orginalcordinates[1].z:=30;
  789.  
  790.   obj.orginalcordinates[2].x:=-5;
  791.   obj.orginalcordinates[2].y:=5;
  792.   obj.orginalcordinates[2].z:=30;
  793.  
  794.   obj.orginalcordinates[3].x:=5;
  795.   obj.orginalcordinates[3].y:=5;
  796.   obj.orginalcordinates[3].z:=30;
  797.  
  798.   obj.orginalcordinates[4].x:=5;
  799.   obj.orginalcordinates[4].y:=-5;
  800.   obj.orginalcordinates[4].z:=30;
  801.  
  802.   obj.orginalcordinates[5].x:=-5;
  803.   obj.orginalcordinates[5].y:=-5;
  804.   obj.orginalcordinates[5].z:=-30;
  805.  
  806.   obj.orginalcordinates[6].x:=-5;
  807.   obj.orginalcordinates[6].y:=5;
  808.   obj.orginalcordinates[6].z:=-30;
  809.  
  810.   obj.orginalcordinates[7].x:=5;
  811.   obj.orginalcordinates[7].y:=5;
  812.   obj.orginalcordinates[7].z:=-30;
  813.  
  814.   obj.orginalcordinates[8].x:=5;
  815.   obj.orginalcordinates[8].y:=-5;
  816.   obj.orginalcordinates[8].z:=-30;
  817.  
  818.     for i:= 1 to 4 do  obj.polys[1].whichpoints[i]:=i;
  819.  
  820.   obj.polys[2].whichpoints[1]:=8;
  821.   obj.polys[2].whichpoints[2]:=7;
  822.   obj.polys[2].whichpoints[3]:=6;
  823.   obj.polys[2].whichpoints[4]:=5;
  824.  
  825.   obj.polys[3].whichpoints[1]:=5;
  826.   obj.polys[3].whichpoints[2]:=6;
  827.   obj.polys[3].whichpoints[3]:=2;
  828.   obj.polys[3].whichpoints[4]:=1;
  829.  
  830.   obj.polys[4].whichpoints[1]:=4;
  831.   obj.polys[4].whichpoints[2]:=3;
  832.   obj.polys[4].whichpoints[3]:=7;
  833.   obj.polys[4].whichpoints[4]:=8;
  834.  
  835.   obj.polys[5].whichpoints[1]:=5;
  836.   obj.polys[5].whichpoints[2]:=1;
  837.   obj.polys[5].whichpoints[3]:=4;
  838.   obj.polys[5].whichpoints[4]:=8;
  839.  
  840.   obj.polys[6].whichpoints[1]:=2;
  841.   obj.polys[6].whichpoints[2]:=6;
  842.   obj.polys[6].whichpoints[3]:=7;
  843.   obj.polys[6].whichpoints[4]:=3;
  844.  
  845.   obj.numberofpolys:=6;
  846.   for i:= 1 to 6 do obj.polys[i].color:=8;
  847.   for i:= 1 to 6 do obj.polys[i].howmanypoints:=4;
  848. END;
  849.  
  850. Procedure rektangle2;
  851.  
  852. var i : integer;
  853.  
  854.  
  855. BEGIN
  856.   obj.numberofpoints:=8;
  857.   obj.degre.x:=0;
  858.   obj.degre.y:=0;
  859.   obj.degre.z:=0;
  860.   obj.degreinc.x:=3;
  861.   obj.degreinc.y:=3;
  862.   obj.degreinc.z:=3;
  863.  
  864.   obj.orginalcordinates[1].x:=-30;
  865.   obj.orginalcordinates[1].y:=-5;
  866.   obj.orginalcordinates[1].z:=30;
  867.  
  868.   obj.orginalcordinates[2].x:=-30;
  869.   obj.orginalcordinates[2].y:=5;
  870.   obj.orginalcordinates[2].z:=30;
  871.  
  872.   obj.orginalcordinates[3].x:=30;
  873.   obj.orginalcordinates[3].y:=5;
  874.   obj.orginalcordinates[3].z:=30;
  875.  
  876.   obj.orginalcordinates[4].x:=30;
  877.   obj.orginalcordinates[4].y:=-5;
  878.   obj.orginalcordinates[4].z:=30;
  879.  
  880.   obj.orginalcordinates[5].x:=-30;
  881.   obj.orginalcordinates[5].y:=-5;
  882.   obj.orginalcordinates[5].z:=-30;
  883.  
  884.   obj.orginalcordinates[6].x:=-30;
  885.   obj.orginalcordinates[6].y:=5;
  886.   obj.orginalcordinates[6].z:=-30;
  887.  
  888.   obj.orginalcordinates[7].x:=30;
  889.   obj.orginalcordinates[7].y:=5;
  890.   obj.orginalcordinates[7].z:=-30;
  891.  
  892.   obj.orginalcordinates[8].x:=30;
  893.   obj.orginalcordinates[8].y:=-5;
  894.   obj.orginalcordinates[8].z:=-30;
  895.  
  896.  
  897.     for i:= 1 to 4 do  obj.polys[1].whichpoints[i]:=i;
  898.  
  899.   obj.polys[2].whichpoints[1]:=8;
  900.   obj.polys[2].whichpoints[2]:=7;
  901.   obj.polys[2].whichpoints[3]:=6;
  902.   obj.polys[2].whichpoints[4]:=5;
  903.  
  904.   obj.polys[3].whichpoints[1]:=5;
  905.   obj.polys[3].whichpoints[2]:=6;
  906.   obj.polys[3].whichpoints[3]:=2;
  907.   obj.polys[3].whichpoints[4]:=1;
  908.  
  909.   obj.polys[4].whichpoints[1]:=4;
  910.   obj.polys[4].whichpoints[2]:=3;
  911.   obj.polys[4].whichpoints[3]:=7;
  912.   obj.polys[4].whichpoints[4]:=8;
  913.  
  914.   obj.polys[5].whichpoints[1]:=5;
  915.   obj.polys[5].whichpoints[2]:=1;
  916.   obj.polys[5].whichpoints[3]:=4;
  917.   obj.polys[5].whichpoints[4]:=8;
  918.  
  919.   obj.polys[6].whichpoints[1]:=2;
  920.   obj.polys[6].whichpoints[2]:=6;
  921.   obj.polys[6].whichpoints[3]:=7;
  922.   obj.polys[6].whichpoints[4]:=3;
  923.  
  924.   obj.numberofpolys:=6;
  925.   for i:= 1 to 6 do obj.polys[i].color:=8;
  926.   for i:= 1 to 6 do obj.polys[i].howmanypoints:=4;
  927.  
  928. end;
  929.  
  930. procedure cube;
  931.  
  932. var i : integer;
  933.  
  934.  
  935.  
  936. begin
  937.   obj.numberofpoints:=8;
  938.   obj.degre.x:=0;
  939.   obj.degre.y:=0;
  940.   obj.degre.z:=0;
  941.   obj.degreinc.x:=3;
  942.   obj.degreinc.y:=3;
  943.   obj.degreinc.z:=3;
  944.  
  945.   obj.orginalcordinates[1].x:=-20;
  946.   obj.orginalcordinates[1].y:=-20;
  947.   obj.orginalcordinates[1].z:=20;
  948.  
  949.   obj.orginalcordinates[2].x:=-20;
  950.   obj.orginalcordinates[2].y:=20;
  951.   obj.orginalcordinates[2].z:=20;
  952.  
  953.   obj.orginalcordinates[3].x:=20;
  954.   obj.orginalcordinates[3].y:=20;
  955.   obj.orginalcordinates[3].z:=20;
  956.  
  957.   obj.orginalcordinates[4].x:=20;
  958.   obj.orginalcordinates[4].y:=-20;
  959.   obj.orginalcordinates[4].z:=20;
  960.  
  961.   obj.orginalcordinates[5].x:=-20;
  962.   obj.orginalcordinates[5].y:=-20;
  963.   obj.orginalcordinates[5].z:=-20;
  964.  
  965.   obj.orginalcordinates[6].x:=-20;
  966.   obj.orginalcordinates[6].y:=20;
  967.   obj.orginalcordinates[6].z:=-20;
  968.  
  969.   obj.orginalcordinates[7].x:=20;
  970.   obj.orginalcordinates[7].y:=20;
  971.   obj.orginalcordinates[7].z:=-20;
  972.  
  973.   obj.orginalcordinates[8].x:=20;
  974.   obj.orginalcordinates[8].y:=-20;
  975.   obj.orginalcordinates[8].z:=-20;
  976.  
  977.   for i:= 1 to 4 do  obj.polys[1].whichpoints[i]:=i;
  978.  
  979.   obj.polys[2].whichpoints[1]:=8;
  980.   obj.polys[2].whichpoints[2]:=7;
  981.   obj.polys[2].whichpoints[3]:=6;
  982.   obj.polys[2].whichpoints[4]:=5;
  983.  
  984.   obj.polys[3].whichpoints[1]:=5;
  985.   obj.polys[3].whichpoints[2]:=6;
  986.   obj.polys[3].whichpoints[3]:=2;
  987.   obj.polys[3].whichpoints[4]:=1;
  988.  
  989.   obj.polys[4].whichpoints[1]:=4;
  990.   obj.polys[4].whichpoints[2]:=3;
  991.   obj.polys[4].whichpoints[3]:=7;
  992.   obj.polys[4].whichpoints[4]:=8;
  993.  
  994.   obj.polys[5].whichpoints[1]:=5;
  995.   obj.polys[5].whichpoints[2]:=1;
  996.   obj.polys[5].whichpoints[3]:=4;
  997.   obj.polys[5].whichpoints[4]:=8;
  998.  
  999.   obj.polys[6].whichpoints[1]:=2;
  1000.   obj.polys[6].whichpoints[2]:=6;
  1001.   obj.polys[6].whichpoints[3]:=7;
  1002.   obj.polys[6].whichpoints[4]:=3;
  1003.  
  1004.   obj.numberofpolys:=6;
  1005.   for i:= 1 to 6 do obj.polys[i].color:=8;
  1006.   for i:= 1 to 6 do obj.polys[i].howmanypoints:=4;
  1007.  
  1008.  
  1009. end;
  1010.  
  1011. Function dotproduct (nor,lig :point):integer;
  1012.  
  1013. begin
  1014.   dotproduct:=nor.x*lig.x+nor.y*lig.y+nor.z*lig.z;
  1015. End;
  1016.  
  1017.  
  1018. Procedure QUICKSORT(lo,hi : INTEGER;var world : SORTTYPE);
  1019.  
  1020. Procedure LORT(l,r : INTEGER; Var World : SORTTYPE);
  1021.  
  1022. var i,j,x,y : INTEGER;
  1023.  
  1024. begin
  1025.   i:=l;
  1026.   j:=r;
  1027.   x:=world.sortlist[(l+r) shr 1,2];
  1028.   repeat
  1029.     while world.sortlist[i,2]<x do inc(i);
  1030.     while x<world.sortlist[j,2] do dec(j);
  1031.     if i<=j then begin
  1032.       y:=world.sortlist[i,1];
  1033.       world.sortlist[i,1]:=world.sortlist[j,1];
  1034.       world.sortlist[j,1]:=y;
  1035.       y:=world.sortlist[i,2];
  1036.       world.sortlist[i,2]:=world.sortlist[j,2];
  1037.       world.sortlist[j,2]:=y;
  1038.       inc(i);
  1039.       dec(j)
  1040.     end
  1041.   until i>j;
  1042.   if l<j then lort(l,j,world);
  1043.   if i<r then lort(i,r,world)
  1044. end;
  1045.  
  1046. begin
  1047.   lort(lo,hi,world)
  1048. end;
  1049.  
  1050.  
  1051. Procedure ZXYROUT;
  1052.  
  1053. Var a,b,c,d,e,f,g,h,j : REAL;
  1054.     i : INTEGER;
  1055.  
  1056. Begin
  1057.   a:=cosa[obj.degre.y]*cosa[obj.degre.z];
  1058.   b:=cosa[obj.degre.y]*sina[obj.degre.z];
  1059.   c:=-sina[obj.degre.y];
  1060.   d:=sina[obj.degre.x]*sina[obj.degre.y]*cosa[obj.degre.z]-cosa[obj.degre.x]*sina[obj.degre.z];
  1061.   e:=sina[obj.degre.x]*sina[obj.degre.y]*sina[obj.degre.z]+cosa[obj.degre.x]*cosa[obj.degre.z];
  1062.   f:=sina[obj.degre.x]*cosa[obj.degre.y];
  1063.   g:=cosa[obj.degre.x]*sina[obj.degre.y]*cosa[obj.degre.z]+sina[obj.degre.x]*sina[obj.degre.z];
  1064.   h:=cosa[obj.degre.x]*sina[obj.degre.y]*sina[obj.degre.z]-sina[obj.degre.x]*cosa[obj.degre.z];
  1065.   j:=cosa[obj.degre.x]*cosa[obj.degre.y];
  1066.   for i:= 1 to obj.numberofpoints do begin
  1067.     obj.rotatedcordinates[i].x :=round( obj.objpos.x+obj.orginalcordinates[i].x*a+obj.orginalcordinates[i].y*b
  1068.     +obj.orginalcordinates[i].z*c);
  1069.     obj.rotatedcordinates[i].y :=round( obj.objpos.y+obj.orginalcordinates[i].x*d+obj.orginalcordinates[i].y*e
  1070.     +obj.orginalcordinates[i].z*f);
  1071.     obj.rotatedcordinates[i].z :=round( obj.objpos.z+obj.orginalcordinates[i].x*g+obj.orginalcordinates[i].y*h
  1072.     +obj.orginalcordinates[i].z*j);
  1073.   end;
  1074. end;
  1075.  
  1076. procedure  uppgradeobject;
  1077.  
  1078. begin
  1079.   inc(obj.degre.x,obj.degreinc.x);
  1080.   inc(obj.degre.y,obj.degreinc.y);
  1081.   inc(obj.degre.z,obj.degreinc.z);
  1082.   if obj.degre.x<0 then inc(obj.degre.x,360);
  1083.   if obj.degre.x>360 then dec(obj.degre.x,360);
  1084.   if obj.degre.y<0 then inc(obj.degre.y,360);
  1085.   if obj.degre.y>360 then dec(obj.degre.y,360);
  1086.   if obj.degre.z<0 then inc(obj.degre.z,360);
  1087.   if obj.degre.z>360 then dec(obj.degre.z,360);
  1088. end;
  1089.  
  1090. Procedure rotateobjects;
  1091.  
  1092. begin
  1093.   zxyrout;
  1094. end;
  1095.  
  1096. procedure perspective;
  1097.  
  1098. var i : INTEGER;
  1099.  
  1100. begin
  1101.   for i:= 1 to obj.numberofpoints do begin
  1102.     obj.screencordinates[i].x:=320+round(longint(obj.rotatedcordinates[i].x)*500/obj.rotatedcordinates[i].z);
  1103.     obj.screencordinates[i].y:=175+round(longint(obj.rotatedcordinates[i].y)*500/obj.rotatedcordinates[i].z);
  1104.   end;
  1105. end;
  1106.  
  1107. procedure readin;
  1108.  
  1109. Var i,b : BYTE;
  1110.     a : INTEGER;
  1111.     col,ux,vx,uy,vy,uz,vz : INTEGER;
  1112.     kv : WORD;
  1113.     normal : POINT;
  1114.     temp,fac : real;
  1115.     n : POINT;
  1116.  
  1117.  
  1118.  
  1119. begin
  1120.   for i:= 1 to obj.numberofpolys do begin
  1121.      a:=0;
  1122.      for b:= 1 to obj.polys[i].howmanypoints do begin
  1123.          if a<obj.rotatedcordinates[obj.polys[i].whichpoints[b]].z then
  1124.             a:=obj.rotatedcordinates[obj.polys[i].whichpoints[b]].z;
  1125.          obj.polys[i].cornerpoints[b]:= obj.screencordinates[obj.polys[i].whichpoints[b]];
  1126.     end;
  1127.    obj.polys[i].zposition:=a;
  1128.      ux:=obj.rotatedcordinates[obj.polys[i].whichpoints[2]].x-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].x;
  1129.      vx:=obj.rotatedcordinates[obj.polys[i].whichpoints[3]].x-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].x;
  1130.      uy:=obj.rotatedcordinates[obj.polys[i].whichpoints[2]].y-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].y;
  1131.      vy:=obj.rotatedcordinates[obj.polys[i].whichpoints[3]].y-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].y;
  1132.      uz:=obj.rotatedcordinates[obj.polys[i].whichpoints[2]].z-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].z;
  1133.      vz:=obj.rotatedcordinates[obj.polys[i].whichpoints[3]].z-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].z;
  1134.      n.x:=(uy*vz-uz*vy);
  1135.      n.y:=(uz*vx-ux*vz);
  1136.      n.z:=(ux*vy-uy*vx);
  1137.      temp:=(sqrt((longint(n.x)*longint(n.x)+longint(n.z)*longint(n.z)+longint(n.y)*longint(n.y))));
  1138.      if temp=0 then temp:=0.01;
  1139.      fac:=7/temp;
  1140.      normal.x:=round(n.x*fac);
  1141.      normal.y:=round(n.y*fac);
  1142.      normal.z:=round(n.z*fac);
  1143.      if normal.z>7 then obj.polys[i].hidden:=true else obj.polys[i].hidden:=false;
  1144.      col:=dotproduct (normal,light);
  1145.      obj.polys[i].shadedcolor:=obj.polys[i].color+col;
  1146.   end;
  1147.   for i:= 1 to obj.numberofpolys do obj.sortdata.sortlist[i,2]:=
  1148.     obj.polys[obj.sortdata.sortlist[i,1]].zposition;
  1149.  
  1150. end;
  1151.  
  1152. procedure putpolys;
  1153.  
  1154. var i : INTEGER;
  1155.  
  1156. begin
  1157.   quicksort (1,obj.numberofpolys,obj.sortdata);
  1158.  
  1159.   setvisualpage(page);
  1160.   page:=page xor 3;
  1161.   setactivepage(page);
  1162.   clearviewport;
  1163.   setcolor(15);
  1164.   for i:= obj.numberofpolys downto 1 do if obj.polys[i].hidden=false then begin
  1165.     setcolor(obj.polys[obj.sortdata.sortlist[i,1]].shadedcolor);
  1166.     setfillstyle(1,obj.polys[obj.sortdata.sortlist[i,1]].shadedcolor);
  1167.     fillpoly (obj.polys[obj.sortdata.sortlist[i,1]].howmanypoints,obj.polys[obj.sortdata.sortlist[i,1]].cornerpoints);
  1168.   end;
  1169. end;
  1170.  
  1171. Procedure initcolors;
  1172.  
  1173. begin
  1174.   setrgbpalette(1,0,0,21);
  1175.   setrgbpalette(2,0,0,24);
  1176.   setrgbpalette(3,0,0,27);
  1177.   setrgbpalette(4,0,0,30);
  1178.   setrgbpalette(5,0,0,33);
  1179.   setrgbpalette(20,0,0,36);
  1180.   setrgbpalette(7,0,0,39);
  1181.   setrgbpalette(56,0,0,42);
  1182.   setrgbpalette(57,0,0,45);
  1183.   setrgbpalette(58,0,0,48);
  1184.   setrgbpalette(59,0,0,51);
  1185.   setrgbpalette(60,0,0,54);
  1186.   setrgbpalette(61,0,0,57);
  1187.   setrgbpalette(62,0,0,60);
  1188.   setrgbpalette(63,0,0,63);
  1189. end;
  1190.  
  1191.  
  1192. procedure init;
  1193.  
  1194. var gd,gm : INTEGER;
  1195.     i : INTEGER;
  1196.  
  1197. begin
  1198.   gd:=vga;
  1199.   gm:=vgamed;          { graphics mode 640*350 pixels }
  1200.   initgraph(gd,gm,'c:\bp\bgi'{your bgi directory});
  1201.   for i:=0 to 360 do begin
  1202.     sina[i]:=sin(i*pi/180{*/180 converts it to radians which the computer
  1203.      calculed in don't think more about this});
  1204.     cosa[i]:=cos(i*pi/180);
  1205.   end;
  1206.   initcolors;
  1207.   page:=2;
  1208.   obj.objpos.x:=0;
  1209.   obj.objpos.y:=0;
  1210.   obj.objpos.z:=150;
  1211.   light.x:=0;
  1212.   light.y:=0;
  1213.   light.z:=1;
  1214.   cube;
  1215.   for i:= 1 to obj.numberofpolys do obj.sortdata.sortlist[i,1]:=i;
  1216. end;
  1217.  
  1218.  
  1219. procedure Close;
  1220.  
  1221. begin
  1222.   closegraph;
  1223. end;
  1224.  
  1225. begin
  1226.  init;
  1227.  repeat
  1228.    uppgradeobject;
  1229.    rotateobjects;
  1230.    perspective;
  1231.    readin;
  1232.    putpolys;
  1233.  until keypressed;
  1234.  close;
  1235. end.